package demo01;

/*throw 关键字
    用throw在方法中抛异常
    使用格式:
    throw new xxxException("异常产生的原因");
    注意：
        1.写在方法内部
        2.new的对象必须是Exception或其子类
        3.抛出了异常对象必须处理
            RuntimeException或者是 RuntimeException的子类对象,我们可以不处理
            编译异常（写代码的时候报错）必须处理，throws或try catch
* */
public class Demo03Throw {
    public static void main(String[] args) {
        int[] arr = {0, 1, 2, 3};
//        int[] arr = null;
        int elem = getElem(arr, 4);
        System.out.println(elem);


    }

    private static int getElem(int[] arr, int i) {
        /*   如果数组arr的值是null
            那么我们就抛出空指针异常,告知方法的调用者"传递的数组的值是null"*/
        if (arr == null) {
            throw new NullPointerException("数组的值是null");
        }
        /*  如果index的范围不在数组的索引范围内
            那么我们就抛出数组索引越界异常,告知方法的调用者"传递的索引超出了数组的使用范围*/
        if (i < 0 || i > arr.length - 1) {
            throw new ArrayIndexOutOfBoundsException("传递的数组索引超过长度");
        }
        int elem = arr[i];
        return elem;
    }

}
